Я постоянно порываюсь весь вар снести и изучение джасса, которое отнимат
Посмотрел твоя карта, ужасный триггер, тройная нагрузка, и Одинаково события! поэтому мы объединение триггер и сократилось нагрузка и чуть меньше килобайт весит карт.
Я сделал полностью оптимизация ГУИ вместо джасс.
Как вам карта?
почему гуи+джасс? Потому что кто не включает UMSWE или русификатор триггеров, различные проблем. Rare, что решает проблем?
Попробуй отключить триггеры, для начала, и затем проверь, запустится ли карта в игре. Особенно те, которые были созданы/редактированы относительно недавно до появления фатала.
Умирающий юнит, в том понятии, в каком его жуёт игра, не имеет баффов.
Вместо "Умирает" отлавливай поулчение смертельного удара (событие юнит получает урон).
Если полученный урон > оставшегося здоровья - то сделать всё то, что у тебя для умирающего
А касательно остальной части, если UnitUserData нигде не используется, создаешь массив юнитов и отрядов. Массив юнитов забиваешь своими капитанами. В UnitUserData капитана пихаешь его порядковый номер в массиве. Создаешь группу юнитов для этого капитана.
Добавление через каст способности.
Я бы делал через 2 разные абилки с одной и той же позицией в интерфейсе. Пока нужный тебе юнит не является частью отряда - у него таргетная абилка при касте которой на капитана он добавляется в группу соответствующего капитана и получает 2ю абилку взамен первой.
Касательно выделения этих пехотинцев - можно намутить что-то с передачей контроля или создать триггер, который будет снимать выделение с юнитов у которых есть 2я абилка. Если ты хочешь чтобы по одиночке можно было выделять пехотинцев - можешь создать переменную для каждого игрока с капитанами, куда будет просто записываться последний выбранный юнит. При снятии выделения - проверять не выбран ли этот же юнит, в случае чего не снимать выделение. Правда не уверен будет ли корректно работать :> В крайнем случае - будет работать в три клика вместо двух. Если я не ошибаюсь.
Касательно поведения этих пехотинцев - что-то реально стоящее сделать сложно. Возможно, но мне не с руки все расписывать :> Простейший вариант - приказывать пехотинцам после добавления в группу следовать за капитаном.
Добавление через атаку капитана
Триггер, проверяющий что капитан получил урон или атакован, как угодно. Далее любым способом проверяешь есть ли в группе этого капитана юниты. Если нет - выбираешь всех пехотинцев N радиусе, добавляешь в отряд, заменяешь абилку/либо просто приказываешь кастануть в капитана первую абилку.
Melissa:
на твоей мапе все работает о_о
вата фак....
в первой версии селектора событие выделения было только у игрока 1, как у тебя
получается, если впихнуть событий выделения на игрока больше одного, они перестают работать?
Nero-PC, если подготовка только началась то юнита ещё нету
он появится лишь по окончанию подготовки
тебе надо смотреть не юнит а тип юнита
там есть реакция на событие - подготавливаемый тип юнита
или чтото подобное
на джасс это будет
Я так и сделал, не получалось потому, что надо два заклинания делать....
Один буферизуется другой нет... Еще один вопрос по теме, что значит буферизуется\не буферизуется? И можно тему закрывать.
Если во всех картах одинаковый id, значит покопайся в хеше.
Это как, можно в личку?
Проблему решил, переделав стандартную способность, а не создавая нестандартную. Это почти что панацея от подобных случаев, когда id (ещё называют raw-code) способности меняется.
Никто доподлинно не знает что Вы делали в своей карте, кроме Вас. После чего это началось? Пока могу только порекомендовать отключить все триггеры в карте — если баг пропадет, значит поочередно включайте триггеры и ищите, какой из них вызывает баг. Если не пропадет, значит причина не в триггерах.
тогда всё ясно карта не полностью скачивается
у меня работает всё
это проблема у тех кто качает карту(диск С забит,браузер тупит или ещё какая нить фигня)
решается либо уменьшением веса карты либо пусть качают через варик
Можно поставить юниту моментальный каст заклинания, занулив "анимация обратный ход броска, точка броска"тогда этой рамочки не будет.
Проверил уже с удалением из выбора?
При инициализации создаешь базу, есть функция генерирующее случайное число. Забиваешь базу данных
UT[0] = пехотинец
UT[1] = бугай
UT[2] = лучница
Count = 2 это кол-во макс. типов, нумерация идёт с нуля у меня
CountU = 20 макс. возможное кол-во юнитов. Здесь можете сами указать . а вообще можно отказаться от этой переменной, проставляете сразу в цикл
Теперь как сделать рандом
set RandomCount = от 1 до CountU генерирует случайное кол-во юнитов Цикл A от 1 до RandomCountнадеюсь знаете как работает цикл? А то многие новички неизнают
-set RandomType = от 0 до Count генерируем случайный тип
-создать юнита с типом UT[RandomType] Конец цикла
Вообще можно раскрыть BJ функцию и посмотреть как там генерируют кол-во циклом тему то переименуйте
Nelloy, я непонимаю как ты собрался делать систему сохранений без локальных файлов? Что за бред? Сейвы априори не могут быть одинаковыми у всех игроков, потому что они постоянно меняются!
Неможет у всех игроков быть одинаковый сейв, как ты собрался рассказать что ты прочитал из файла у красного игрока, если у синего нет такого файла, а у синезелёного в файле совершенно другое содержимое, это и есть локальные файлы!
Тебе так и так придется синхронизировать сейв.
Не понимаю в чем проблема? 100500 сейвов работают на preload exploit и прекрасно себя чуствуют, если вам банальный синк который разжеван в 101 месте не по зубам, сразу оставляем в покое мемхак.
Возможно "канал" так же имеет отличную от остальных абилок структуру
Рабочий вариант
function StartAbilityCD takes unit whichUnit, integer abilityId returns boolean
local integer pAbility = 0
local real cd = GetAbilityCD(abilityId, GetPlayerId(GetOwningPlayer(whichUnit))+1)
if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId ) < 1 or cd == 0.00 then
return false
endif
set pAbility = GetUnitAbility(whichUnit, abilityId)
if pAbility < 1 then
return false
else
if RMem(pAbility+0x134)==-1 and RMem(pAbility+0x138)==-1 then
call WMem(pAbility+0x134,0)
call WMem(pAbility+0x138,0)
endif
set Memory[pReserverdIntArg1 / 4] = mR2I(cd)
call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
return IsAbilityOnCooldown( pAbility )
endif
return false
endfunction
Armouk, во первых это не вопрос
во вторых - почему тебе должны помогать?
лично я не вижу не 1 причины чтобы делать за тебя карту
или ты бог а все вокруг твои рабы?
если ты и вправду так думаешь то тебе на сайт любителей бдсм
Поскольку его не пугает наличие большого влияния промахов на геймплей - скорее всего он делает рпг. Имхо в рпг всегда клево смотрятся тексттаги полученного урона, для создания которых необходимы триггеры на отлов получения урона. А отлавливаемый урон - можно и прохилить.
Для прохила(и вообще всех манипуляций с задержкой в 0.00 сек) лично я юзаю такие костыли:
Либа здесь только для доп табуляции. Я за чистый жасс + дефайны.
library ZeroTimeEvent
globals
constant integer ZTEArraySize = 64//Even 32 is alot, 64 is too much! Exactly what I need!
timer Zero//Used for 0. sec uses
integer ZTECurrent = 0
unit array ZTEUnits[ZTEArraySize]
integer array ZTEIntegers[ZTEArraySize]
real array ZTEReals[ZTEArraySize]
trigger array ZTETriggers[ZTEArraySize]
endglobals
function ZeroTimeEvent takes nothing returns nothing
loop
set ZTECurrent = ZTECurrent - 1
call TriggerExecute( ZTETriggers[ZTECurrent] )
exitwhen ZTECurrent < 1
endloop
endfunction
#define ZTEAddUnit(u) = {
set ZTEUnits[ZTECurrent] = u
}
#define ZTEAddInteger(i) = {
set ZTEIntegers[ZTECurrent] = i
}
#define ZTEAddReal(r) = {
set ZTEReals[ZTECurrent] = r
}
#define ConfirmZTE(trig) = {
set ZTETriggers[ZTECurrent] = trig
set ZTECurrent = ZTECurrent + 1
call TimerStart( Zero, ZeroTime, false, function ZeroTimeEvent )
}
endlibrary
Absorbentum, Заказ небольших триггерных или джаз систем тоже разрешен в теме заказа заклинаний а вообще-если хотите серьезно сотрудничать создайте свой блог или презентуйте проект чтобы заинтересовать людей.
Alexander69, xgm.guru/p/wc3/optimisations
внимательно прочти то что там написано
особенно про переменные
если коротко то объект не может быть удалён из памяти пока используется (хранится в переменных/хэше/кэше)
Вот как должен выглядеть полностью правильный триггер без утечек, единственная утечка создастся только при первом использовании, это я так понял переменная группы, ее обнулять нельзя, иначе скил будет работать только раз.
создаешь объект, спрашиваешь, какой у него handle
если меньше 0x100000 - беспокоиться не о чем, он локальный и сам разрушится, если не помешаешь ссылками на него (да и то не факт, что это влияет для них). тем паче, что даже в нативке указывается, вечная или нет деформация
этот (terraindeform) - локальный, если что.
о когда я сделал своего героя в нём, то в игре он почему то не используется, в редакторе выставляешь юнита на карту, но при проверке карты, его просто нет.
Ты открыл карту из редактора кампании?
Если нет - поэтому и не отображается.
Порылся в игровых константах (Вкладка "Дополнительно"). Если изменить указанный пункт, можно задать часть получаемого опыта при отрыве уровня героя. Если поставить все числа 100, то всегда будет даваться полный объем опыта. Можно поставить последнее число 50, тогда при большом отрыве уровней, будет даваться только половина опыта. Как-то так. Могу ошибаться
Ну у мастера клинка способность то посложнее...
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
Obelick, эта либо не трогает мультибоарды
она по точкам(location) в основном работает Obelick:
учить ради них джас и переписывать мне настолько лень
если ты нормально знаешь гуи и имеешь базовые знания по использованию гугл переводчика то переписать мультибоард на jass много времени не займёт
кроме того тебе не обязательно переписывать полностью
можно сконвертировать в код и поправить то что вызывает утечки
если ты говоришь об утечках в функции установки значения ячейки мультибоарда то их можно убрать следующим кодом
вставь его в шапку карты (туда где ты ALL.j подключал)
правда после этого автозаполнение строк/столбцов перестанет работать и придётся делать его циклом
Будет на несколько сек грузится быстрее, будут меньше просадки фпс при вручении абилок если они неподгружены и так далее.
Вес упадет немного, но упадет.
Есть обычные тени - они выглядят как округлое-размытое пятно
А есть тени зданий - они являются своеобразным рисунком, размер которого не регулируется, как у варианта выше
Есть так же некая "текстура почвы", которая добавляет отрисовку на поверхности земли, стилизованную под постройки или даже под конкретную постройку (как например у ратуши и золотой шахты).
. . .
Под маленькую обсерваторию лучше использовать "тень здания" такую, которая соответствовала бы её размеру - например тень сторожевых башен орков/людей. Если нужно побольше - вариант с гнездом химеры, обелиском, и камнем воскрешения (как те что в кампании Рексара).
Касаемо текстуры земли - можно взять один из стандартных вариантов под здания альянса - каменная плитка на земле. Она есть разных размеров и подобрать что-то подходящее можно.
нет, конвертации напрямую нет. я что-то слышал в прошлом про баг с сохранением fogmodifier в хештаблицу, но деталей не знаю, можешь проверить то направление.
ну и мемхак, на крайняк, офк.
ScopteRectuS, у тебя где то перезаписывается bj_lastCreatedUnit
причём происходит это после первой итерации GroupEnumUnitsInRange
а вообще не стоит юзать стандартные бж переменные
т.к. они могут конфликтовать с другими системами
используй приватные переменные
если после перехода на приватные глобалки проблема останется то скопируй систему на отдельную карту и кинь эту карту сюда
буду тестить разные варианты
ScopteRectuS, ну как я и догадывался, что идет рекурсия.
10 событий - юнит получает урон, на одного юнита... Нужны именно такого типа проверки, всегда в условии триггера проверяй от кого урон и какой этот урон с помощью флага глобалки как в примере.В блоге лича хорошо описаны костыли доты, почитай для общего развития чтобы не наступать на эти грабли еще раз.
Nelloy, будет но для этого данные нужно синхронизировать, для ваших сейв\лоадов есть давно проверенная система, которая не требует мемхака - Data Manager, не надо никакого мемхака. Все понятно и просто, вот неужели нельзя изучить всю мат часть по сейвам прежде чем пороть горячку?
ScopteRectuS, у тебя где то перезаписывается bj_lastCreatedUnit
причём происходит это после первой итерации GroupEnumUnitsInRange
а вообще не стоит юзать стандартные бж переменные
т.к. они могут конфликтовать с другими системами
используй приватные переменные
если после перехода на приватные глобалки проблема останется то скопируй систему на отдельную карту и кинь эту карту сюда
буду тестить разные варианты
» WarCraft 3 / Карта вылетает :(
» WarCraft 3 / 1 юнит = отряд
» WarCraft 3 / В чем ошибка?
» WarCraft 3 / Иконки способностей для предметов
» WarCraft 3 / Вылетает вар.
» WarCraft 3 / Игровой чат
» WarCraft 3 / Настройка Канала
» WarCraft 3 / Замена типа брони
» WarCraft 3 / Двумерные массивы
» WarCraft 3 / нужна помощь с тригерром(тригерами)
» WarCraft 3 / MemHack
» WarCraft 3 / Не показывается перезарядка предмета
» WarCraft 3 / Где заказать?!?
» WarCraft 3 / Утечка или не утечка.
» WarCraft 3 / Камера
» WarCraft 3 / Продажа предметов
» WarCraft 3 / Как делать спеллы в предметах?
» WarCraft 3 / Опыт
» WarCraft 3 / Событие с иллюзией.
» WarCraft 3 / Создание информации.
» WarCraft 3 / Как изменить размер карты.
» WarCraft 3 / constant function
» WarCraft 3 / PreloadAbility( integer )